package base.service;

import base.entity.OpenedFile;
import base.entity.regitem.FileRegItem;
import base.view.DirectoriesView;

/**
 * @PackgeName: base.service
 * @ClassName: FileService
 * @Author: z8932
 * Date: 2019/12/5 18:39
 * project name: OperationSystem
 * @Version:
 * @Description:
 */
public interface FileService {
    /**
     * 在当前目录下创建文件
     * @param nameAndType 文件名字和类型  例如a.txt，用.分割
     * @param property 文件属性
     * @param blockNum 当前目录盘块号
     * @return 创建成功与否
     */
    boolean creatFile(String nameAndType, int property, int blockNum);

    /**
     * 根据路径查找文件
     * @param filePath 文件绝对路径
     * @return 查找到的文件登记项
     */
    FileRegItem searchFileByPath(String filePath);

    /**
     * 根据登记项打开文件
     * 与OpenedFilesSingleton交互放入OpenedFile
     * @param dirPath 当前目录路径
     * @param fileRegItem 文件登记项
     * @return 打开结果
     */
    boolean openFileByRegItem(String dirPath, FileRegItem fileRegItem);

    /**
     * 根据绝对路径打开文件
     * @param path 文件绝对路径
     * @return 打开结果
     */
    boolean openFileByPath(String path);

    /**
     * 根据绝对路径从openedfilessingleton中获取已打开文件
     * @param filePath 文件绝对路径
     * @return 读取到的完整字符串
     */
    String readFile(String filePath) throws Exception;

    /**
     * 根据绝对路径从openedfilessingleton中获取已打开文件
     * 在文件的末尾添加文本
     * @param text 添加的文本
     * @param filePath 文件绝对路径
     * @return  写操作成功与否
     */
    boolean writeFile(String text, String filePath) throws InterruptedException;

    /**
     * 关闭已打开文件
     * @param filePath 文件绝对路径
     * @return 关闭结果
     */
    boolean closeFile(String filePath);

    /**
     * 根据文件绝对路径删除文件
     * @param dirPath 当前目录路径
     * @param fileRegItem 文件登记项
     * @return 删除结果
     */
    boolean deleteFile(String dirPath, FileRegItem fileRegItem);

    /**
     * 显示登记项内容
     * @param fileRegItem 文件登记项
     * @return 文件登记项
     */
    FileRegItem typeFile(FileRegItem fileRegItem);

    /**
     * 改变文件登记项属性
     * @param nameAndType 文件名和类型
     * @param property 文件属性
     * @param dirPath 文件目录路径
     * @param fileRegItem 原文件登记项
     * @return 修改结果
     */
    boolean changeFileType(String nameAndType, byte property, String dirPath , FileRegItem fileRegItem);

    /**
     * 获取文件的绝对路径
     * @param dirPath 目录路径
     * @param fileRegItem 文件登记项
     * @return 绝对路径
     */
    public String getAbsolutePath(String dirPath, FileRegItem fileRegItem);

    /**
     * 根据文件绝对路径去除名字类型首尾的空格
     * 路径名一致性
     * @param filePath 文件绝对路径
     * @return 文件绝对路径去除名字类型首尾的空格
     */
    public String getAbsolutePath(String filePath);
}
